package ArrayClass;

/*
反转字符串中的元音字母
给你一个字符串 s ，仅反转字符串中的所有元音字母，并返回结果字符串。
元音字母包括 'a'、'e'、'i'、'o'、'u'，且可能以大小写两种形式出现不止一次。

示例 1：
输入：s = "IceCreAm"
输出："AceCreIm"
解释：
s中的元音是['I', 'e', 'e', 'A']。反转这些元音，s 变为"AceCreIm".
示例 2：
输入：s = "leetcode"
输出："leotcede"

作者：LeetCode
链接：https://leetcode.cn/leetbook/read/all-about-array/x93lce/
 */

public class _33反转字符串中的元音字母 {
    public static void main(String[] args) {

    }

    //官解：双指针
    //遇到交换字符串中的字符时可以将字符串转成字符数组进行操作
    class Solution {
        public String reverseVowels(String s) {
            int n = s.length();
            char[] arr = s.toCharArray();
            int i = 0, j = n - 1;
            while (i < j) {
                while (i < n && !isVowel(arr[i])) {
                    ++i;
                }
                while (j > 0 && !isVowel(arr[j])) {
                    --j;
                }
                if (i < j) {
                    swap(arr, i, j);
                    ++i;
                    --j;
                }
            }
            return new String(arr);
        }

        public boolean isVowel(char ch) {
            return "aeiouAEIOU".indexOf(ch) >= 0;
        }

        public void swap(char[] arr, int i, int j) {
            char temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }

}
